using System;
using System.Collections.Generic;

// 用户实体类：模拟实际业务中的用户数据模型
public partial class User
{
    public int Id { get; set; }       // 用户ID（唯一标识）
    public string Name { get; set; } // 用户名
    public int Age { get; set; }     // 年龄
    public string Username { get; set; }
    public string Password { get; set; }

    // 重写ToString，方便打印用户信息
    public override string ToString()
    {
        return $"User [Id={Id}, Name={Name}, Age={Age}]";
    }
}

// 接口：定义用户服务的增删改查规范
public abstract class UserService
{
    public abstract User Add(User user);
    public abstract bool Delete(int id);
    public abstract User Update(User user);
    public abstract User GetById(int id);
    public abstract void StartSystem();
}

// 接口实现类：具体实现增删改查逻辑（这里用内存集合模拟数据库操作）
public class UserServiceImpl : UserService
{
    // 模拟数据库：用字典存储用户（Key=ID，Value=User对象）
    private readonly Dictionary<int, User> _userDict = new Dictionary<int, User>();
    private int _nextId = 1; // 用于生成自增ID

    // 新增用户
    public override User Add(User user)
    {
        if (user == null)
        {
            throw new ArgumentNullException(nameof(user), "新增的用户不能为null");
        }

        // 自动生成ID（实际业务中可能由数据库自增）
        user.Id = _nextId++;
        _userDict.Add(user.Id, user);
        Console.WriteLine($"新增用户成功：{user}");
        return user;
    }

    // 删除用户
    public override bool Delete(int id)
    {
        if (_userDict.ContainsKey(id))
        {
            User deletedUser = _userDict[id];
            _userDict.Remove(id);
            Console.WriteLine($"删除用户成功：{deletedUser}");
            return true;
        }
        else
        {
            Console.WriteLine($"删除失败：未找到ID为{id}的用户");
            return false;
        }
    }

    // 修改用户
    public override User Update(User user)
    {
        if (user == null)
        {
            throw new ArgumentNullException(nameof(user), "修改的用户不能为null");
        }

        if (_userDict.ContainsKey(user.Id))
        {
            _userDict[user.Id] = user; // 覆盖原用户信息
            Console.WriteLine($"修改用户成功：{user}");
            return user;
        }
        else
        {
            Console.WriteLine($"修改失败：未找到ID为{user.Id}的用户");
            return null;
        }
    }

    // 查询用户
    public override User GetById(int id)
    {
        if (_userDict.TryGetValue(id, out User user))
        {
            Console.WriteLine($"查询到用户：{user}");
            return user;
        }
        else
        {
            Console.WriteLine($"查询失败：未找到ID为{id}的用户");
            return null;
        }
    }

    public override void StartSystem()
    {
        throw new NotImplementedException();
    }
}